 
       

       
declare
cursor c_cont is select * from ASM_CTTI_TF_TIA_FIM_1f;

   
   r_tia                 ASM_CTTI_TF_TIA_FIM_1t%ROWTYPE;

  v_errore     NUMBER(1);
  eletopo_des   VARCHAR2(200);
  v_str_err   VARCHAR2(200);
 

BEGIN
execute immediate 'truncate table ASM_CTTI_TF_TIA_FIM_0';
execute immediate 'truncate table ASM_CTTI_TF_TIA_FIM_tf';
   execute immediate 'truncate table ASM_CTTI_TF_TIA_FIM_1f';
    execute immediate 'truncate table ASM_CTTI_TF_TIA_FIM_1t';
  execute immediate 'truncate table ASM_CTTI_TF_TIA_FIM_nook';
   execute immediate 'truncate table  ASM_CTTI_TF_TIa';
    execute immediate 'truncate table ASM_CTTI_TF_FIM';
  begin
  insert into ASM_CTTI_TF_FIM

select to_char( CO.CODICE_CONTRATTO) contratto_fim,data_avvio,COMUNE_TIA,COD_VIA_TIA,
concat(concat(concat(concat(TOPONIMO_VIA,' '),PREFISSO_VIA),' '),DENOMINAZIONE_VIA) indirizzo_fim,IZ.CIVICO,IZ.ESTENSIONE_CIVICO,
COMUNE,trim(PERSONE.PARTITA_IVA) partita_iva,
case when trim(PERSONE.PARTITA_IVA) is not null and 
decode (an.numero_fami,null,
                                                               case when trim(persone.CODICe_FISCALE) is null and trim(persone.CODICe_FISCALE) is null then 
                                                                             concat('XXXXX',co.codice_contratto)
                                                                             else trim(persone.CODICe_FISCALE) end ,
                                                                               concat(numero_fami,'NF')) is not null then null else 
       decode (an.numero_fami,null,
                                                               case when trim(persone.CODICe_FISCALE) is null and trim(persone.CODICe_FISCALE) is null then 
                                                                             concat('XXXXX',co.codice_contratto)
                                                                             else trim(persone.CODICe_FISCALE) end ,
                                                                               concat(numero_fami,'NF'))   end                                                                     
                                                                               
                                                                               codice_fiscale,
PERSONE.NOMINATIVO_RAG_SOC RAG_SOC_FIM,
replace(replace(replace(replace(replace(replace(PERSONE.NOMINATIVO_RAG_SOC,' ',null),'-',null),'*',null),'/',null),'&',null),'.',null) nome_fim,
persone.codice_fiscale codicefiscale,persone.partita_iva partitaiva,
decode(an.codice_tipo_evento,'D','DECEDUTO') evento,decode(an.codice_tipo_evento,'D',data_evento) data_evento
from db5.contratti@pgu3 co,
           db5.contratti_aggregazioni@pgu3 ca,
           db5.indirizzi@pgu3 iz,
                  db1.vie_tia_fimm @pgu3 vi,
                  DB5.PERSONE@PGU3,db1.asm_anagrafe_terni_old@pgu3 an
 where          co.codice_gestione='UNRG'
              and  ca.codice_gestione='UNRG'
              and co.codice_servizio='E'
              and  ca.codice_utente=co.codice_utente
              and ca.codice_indirizzo_utilizzatore = iz.codice_indirizzo
              and iz.codice_via=vi.cod_via_fimm
              and iz.codice_comune=vi.comune_fimm
              and co.stato_contratto='A'
              AND CA.CODICE_PERSONA_UTILIZZATORE=PERSONE.CODICE_PERSONA
             AND PERSONE.NOMINATIVO_RAG_SOC NOT LIKE '%CONDOMIN%'
              AND PERSONE.NOMINATIVO_RAG_SOC NOT LIKE '%COND.%'
             AND  PERSONE.NOMINATIVO_RAG_SOC NOT LIKE '%CONDOM.%'
              AND  PERSONE.NOMINATIVO_RAG_SOC NOT LIKE '%COLLETTIV%'
                    and nvl(trim(persone.codice_fiscale),9999)=an.codice_fiscale(+)
  UNION
select to_char(CO.CODICE_CONTRATTO),data_avvio,COMUNE_TIA,COD_VIA_TIA,
concat(concat(concat(concat(TOPONIMO_VIA,' '),PREFISSO_VIA),' '),DENOMINAZIONE_VIA) indirizzo_fim,IZ.CIVICO,IZ.ESTENSIONE_CIVICO,
COMUNE,trim(PERSONE.PARTITA_IVA),
case when trim(PERSONE.PARTITA_IVA) is not null and 
decode (an.numero_fami,null,
                                                               case when trim(persone.CODICe_FISCALE) is null and trim(persone.CODICe_FISCALE) is null then 
                                                                             concat('XXXXX',co.codice_contratto)
                                                                             else trim(persone.CODICe_FISCALE) end ,
                                                                               concat(numero_fami,'NF')) is not null then null else 
       decode (an.numero_fami,null,
                                                               case when trim(persone.CODICe_FISCALE) is null and trim(persone.CODICe_FISCALE) is null then 
                                                                             concat('XXXXX',co.codice_contratto)
                                                                             else trim(persone.CODICe_FISCALE) end ,
                                                                               concat(numero_fami,'NF'))          end                                                              
                                                                               
                                                                               codice_fiscale,
PERSONE.NOMINATIVO_RAG_SOC RAG_SOC_FIM,
replace(replace(replace(replace(replace(replace(PERSONE.NOMINATIVO_RAG_SOC,' ',null),'-',null),'*',null),'/',null),'&',null),'.',null) nome_fim,
persone.codice_fiscale codicefiscale,persone.partita_iva partitaiva,
decode(an.codice_tipo_evento,'D','DECEDUTO') evento,decode(an.codice_tipo_evento,'D',data_evento) data_evento
from db1.contratti@pgu3 co,
           db1.contratti_aggregazioni@pgu3 ca,
           db1.indirizzi@pgu3 iz,
                  db1.vie_tia_fimm @pgu3 vi,
                   DB1.PERSONE@PGU3,db1.asm_anagrafe_terni_old@pgu3 an
 where          co.codice_gestione='ASM'
              and  ca.codice_gestione='ASM'
              and co.codice_servizio='E'
              and  ca.codice_utente=co.codice_utente
              and ca.codice_indirizzo_utilizzatore = iz.codice_indirizzo
              and iz.codice_via=vi.cod_via_fimm
              and iz.codice_comune=vi.comune_fimm
              and co.stato_contratto='A'
              AND CA.CODICE_PERSONA_UTILIZZATORE=PERSONE.CODICE_PERSONA
               AND PERSONE.NOMINATIVO_RAG_SOC NOT LIKE '%CONDOMIN%'
              AND PERSONE.NOMINATIVO_RAG_SOC NOT LIKE '%COND.%'
             AND  PERSONE.NOMINATIVO_RAG_SOC NOT LIKE '%CONDOM.%'
              AND  PERSONE.NOMINATIVO_RAG_SOC NOT LIKE '%COLLETTIV%'
              and nvl(trim(persone.codice_fiscale),9999)=an.codice_fiscale(+);
  end;
 
 
 begin
  insert into  ASM_CTTI_TF_TIA      
  SELECT concat(U.CON_ANNO,U.CON_ID) contratto_tia,u.ver_dtini,si.COM_ID,si.ELET_ID,
  concat(concat(si.TELET_DES,' '),si.ELET_DESSTA) indirizzo_tia,si.IND_NUM,si.IND_SUF,si.COM_DES,
 SO.SOG_PARIVA,
 case when  sog_pariva is not null  and 
decode (an.numero_fami,null,
                                                               case when trim(sog_codfis ) is null and trim(sog_codfis ) is null then 
                                                                             concat('XXXXX',so.sog_id)
                                                                             else trim(sog_codfis ) end ,
                                                                               concat(numero_fami,'NF')) is not null
                                                                               then null
                                                                               else 
            decode (an.numero_fami,null,
                                                               case when trim(sog_codfis ) is null and trim(sog_codfis ) is null then 
                                                                             concat('XXXXX',so.sog_id)
                                                                             else trim(sog_codfis ) end ,
                                                                               concat(numero_fami,'NF'))                                                                   
                                                                               
                                                                               
                                                                               end sog_codfis,

 
 
 
  SOG_RAGSOCCLIFIN RAG_SOC_TIA,
  replace(replace(replace(replace(replace(replace(SOG_RAGSOCCLIFIN,' ',null),'-',null),'*',null),'/',null),'&',null),'.',null) nome_tia,
  so.sog_codfis sogcodfis,
 so.sog_pariva sogpariva,decode(codice_tipo_evento,'D','DECEDUTO') evento,decode(an.codice_tipo_evento,'D',data_evento) data_evento

  
  FROM V_CONUBIFRN U, V_CONTRATTO C,SOGGETTO SO,db1.asm_anagrafe_terni_old@pgu3 an,v_sito si
  WHERE
               U.CON_ID=C.CON_ID
      AND U.CON_ANNO=C.CON_ANNO
      AND C.STA_IDSYS=2
      AND C.VER_DTFINE=TO_DATE('31129999','DDMMYYYY')
     AND U.STA_IDSYS=2
      AND U.VER_DTFINE=TO_DATE('31129999','DDMMYYYY')
      AND C.AZ_ID='01'     
       AND U.AZ_ID='01' 
       AND SO.SOG_ID = C.SOG_ID
       AND si.AZ_ID='01'
       and si.sito_id=u.sito_id
        AND si.STA_IDSYS=2
      AND si.VER_DTFINE=TO_DATE('31129999','DDMMYYYY')
       and so.sog_codfis=an.codice_fiscale(+);
 end;
 
  begin
  insert into  ASM_CTTI_TF_TIA_FIM_0 
      
      SELECT COMUNE_TIA COM_ID,COD_VIA_TIA ELET_ID, CIVICO IND_NUM,
      NVL(CTR_FIM,0) CTR_FIM,NVL(CTR_TIA,0) CTR_TIA
      FROM 
       
      ( SELECT COMUNE_TIA,COD_VIA_TIA,civico,SUM(1) CTR_FIM FROM  ASM_CTTI_TF_FIM   --where COD_VIA_TIA=490      AND      CIVICO=45
      GROUP BY COMUNE_TIA,COD_VIA_TIA,CIVICO) f,
     
       (SELECT COM_ID,ELET_ID,IND_NUM,SUM(1) CTR_TIA FROM  ASM_CTTI_TF_TIA  --WHERE SOG_CODFIS='ZVLMSM60A18L117T'
       GROUP BY COM_ID,ELET_ID,IND_NUM)T
            
       
       WHERE F.COMUNE_TIA=T.COM_ID
       AND      F.COD_VIA_TIA=T.ELET_ID
       AND      F.CIVICO=T.IND_NUM
       AND      F.CTR_FIM>NVL(T.CTR_TIA,0);
  end;
  commit;
  begin
  insert into ASM_CTTI_TF_TIA_FIM_1f
    SELECT rownum rn,COMUNE_TIA com_id,COD_VIA_TIA elet_id ,CIVICO ind_num,CODICE_FISCALE sog_codfis,PARTITA_IVA sog_pariva,
      nome_fim , rag_soc_fim ,contratto_fim,data_avvio,codicefiscale
      FROM  ASM_CTTI_TF_FIM     
          f,ASM_CTTI_TF_TIA_FIM_0  f0
          where F.COD_VIA_TIA=f0.elet_id
       AND      F.CIVICO=f0.ind_num
       and f0.ctr_fim>f0.ctr_tia;
  end;
  COMMIT;
  
  begin
  insert into ASM_CTTI_TF_TIA_FIM_1t 
                  SELECT rownum rn,t.com_id,t.elet_id,t.ind_num,t.sog_codfis,t.sog_pariva,
      nome_tia ,0 CTR_tia
      FROM  ASM_CTTI_TF_tia
  
     t,ASM_CTTI_TF_TIA_FIM_0  f0
          where t.elet_id=f0.elet_id
       AND      t.ind_num=f0.ind_num
       and f0.ctr_fim>f0.ctr_tia;
  end;
  

   for r_cont IN c_cont LOOP
   begin 
   select eletopo_des into eletopo_des
   from v_eletopo e
   where e.elet_id=r_cont.elet_id
   and      e.com_id=r_cont.com_id;
   end;
     begin
     select * into r_tia
                               from ASM_CTTI_TF_TIA_FIM_1t t  
                               where t.elet_id=r_cont.elet_id
                                            and t.ind_num=r_cont.ind_num
                                            and (trim(t.nome_tia)=trim(r_cont.nome_FIM)
                                                     OR  T.SOG_PARIVA=R_CONT.SOG_PARIVA
                                                      OR T.SOG_CODFIS=R_CONT.SOG_CODFIS)
                                            
                                           and t.rn= (select min(rn) from  ASM_CTTI_TF_TIA_FIM_1t t1 where
                                                                               t.elet_id=t1.elet_id
                                                                                  and t.ind_num=t1.ind_num
                                                                                and t.nome_tia=t1.nome_tia
                                                                                 AND NVL(t.SOG_PARIVA,0)=NVL(T1.SOG_PARIVA,0)
                                                                                  AND NVL(t.SOG_CODFIS,0)=NVL(T1.SOG_CODFIS,0)                                                                                
                                                                                   )
                                                                                       ;
                                                                                       
     EXCEPTION
         WHEN NO_DATA_FOUND THEN
           -- Non esiste una utenza con quel codice contratto
           insert into ASM_CTTI_TF_TIA_FIM_tf values 
           (r_cont.contratto_fim,r_cont.data_avvio,r_cont.com_id,r_cont.elet_id,eletopo_des,r_cont.ind_num,
           case when r_cont.sog_codfis like '%NF' then r_cont.sog_codfis end ,r_cont.codice_fiscale,r_cont.sog_pariva,r_cont.rag_soc_fim);
           v_errore := 0;
           GOTO fine_loop;
           WHEN TOO_MANY_ROWS THEN
           -- Esistono piu UTENZEcon quel codice contratto
         v_str_err := 'too many rows elet_id' || rtrim(  r_cont.elet_id) ||' ind_num '|| rtrim(  r_cont.ind_num) ||' nome_fim '|| rtrim(  r_cont.nome_fim);
           v_errore := 1;
           GOTO fine_LOOP;
           
     end;
     
     delete ASM_CTTI_TF_TIA_FIM_1t z where z.rn=r_tia.rn;
     commit;
    
    <<fine_loop>> 
    COMMIT;
     if v_errore = 1
     then 
       insert into ASM_CTTI_TF_TIA_FIM_nook values( v_str_err);
       COMMIT;
       v_errore:=0;
      end if;  
   end loop; 
   
   END;
 




